home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 60152 / 60152.xpi / chrome / content / realurl / realurl.js < prev    next >
Text File  |  2010-01-18  |  4KB  |  111 lines

  1. RealURL = {
  2.     // hidden preferences...
  3.     service: "",
  4.     timeout: NaN,
  5.     
  6.     // private...
  7.     request: null,
  8.     timer: null,
  9.     
  10.     // what to display...
  11.     display: {
  12.         url: false,
  13.         type: false,
  14.         charset: false,
  15.         size: false,
  16.         title: false
  17.         },
  18.     
  19.     pref: Components
  20.         .classes["@mozilla.org/preferences-service;1"]
  21.     .getService(Components.interfaces.nsIPrefService)
  22.         .getBranch("extension.realurl."),
  23.     
  24.     abort: function () {
  25.         if (RealURL.timer) {
  26.             clearTimeout(RealURL.timer)
  27.             RealURL.timer = null
  28.             }
  29.         if (RealURL.request) {
  30.             RealURL.request.abort()
  31.             RealURL.request = null
  32.             RealURL._status.label = RealURL.message("aborted")
  33.             }
  34.         },
  35.  
  36.     expand: function () {
  37.         this.abort()
  38.         
  39.         // refresh display settings...
  40.         for (var p in this.display) this.display[p] = this.pref.getBoolPref("display." + p)
  41.         
  42.         var url = window.gContextMenu?
  43.             gContextMenu.getLinkURL? gContextMenu.getLinkURL() : gContextMenu.linkURL() // mostly
  44.             : client.menuManager.contextFunction("context:messages", null).url // ChatZilla
  45.         
  46.         this._status.label = RealURL.message("expanding").replace(/#/, url)
  47.         var req = new XMLHttpRequest, my = this
  48.         req.open("GET", this.service.replace(/%/, url.replace(/.*:\/\//, "")), true)
  49.         req.onload = function () {
  50.             if (req.status == 200) {
  51.                 var rsp = JSON.parse(req.responseText), txt = "TheRealURL: "
  52.                 if (my.display.url) txt += rsp.url
  53.                 if (my.display.title) txt += (txt == ""? "" : " ") + '"' + rsp.title + '"'
  54.                 if (my.display.type || my.display.charset) txt += (txt == ""? "(" : " (")
  55.                 if (my.display.type) txt += rsp.headers["content-type"].replace(/;.*$/, "")
  56.                 if (my.display.type && my.display.charset) txt += "; "
  57.                 if (my.display.charset) txt += rsp.headers["content-type"].replace(/^[^;]*;\s+/, "")
  58.                 if (my.display.type || my.display.charset) txt += ")"
  59.                 if (my.display.size) txt += (txt == ""? "" : " ") + rsp.headers["content-length"]
  60.                 my._status.label = txt
  61.                 }
  62.             else my._status.label = RealURL.message("cannot") + " (" + req.status + ")"
  63.             }
  64.         req.onerror = function () {
  65.             my._status.label = RealURL.message("error")
  66.             }
  67.         req.send(null)
  68.         this.timer = setTimeout(this.abort, 1000 * this.timeout)
  69.         },
  70.         
  71.     load: function () {
  72.         // prefs...
  73.         RealURL.service = RealURL.pref.getCharPref("service.url")
  74.         RealURL.timeout = RealURL.pref.getIntPref("service.timeout")
  75.         
  76.         // UI...
  77.         RealURL._status = document.getElementById("statusbar-display") // Firefox
  78.             || document.getElementById("statusText") // Thunderbird
  79.             || document.getElementById("status-text") // ChatZilla
  80.  
  81.         RealURL._menuitem = document.getElementById("realurl-item")
  82.         if (RealURL._menuitem.parentNode.localName == "overlaytarget") { // ChatZilla...
  83.             document.getElementById("context:messages")
  84.                 .insertBefore(
  85.                     RealURL._menuitem.parentNode.removeChild(RealURL._menuitem),
  86.                     document.getElementById("context:messages:popup:usercommands")
  87.                     )
  88.             }
  89.  
  90.         RealURL._menuitem.parentNode.addEventListener("popupshowing", RealURL.show, false)
  91.         },
  92.         
  93.     message: function (key) {return this._menuitem.getAttribute(key)},
  94.         
  95.     show: function (event) {
  96.         if (window.gContextMenu) // most places...
  97.             with (gContextMenu) RealURL._menuitem.hidden = !onLink || onMailtoLink
  98.         else { // ChatZilla...
  99.             try {
  100.                 var url = client.menuManager.contextFunction("context:messages", null).url
  101.                 RealURL._menuitem.hidden = !url || url.indexOf("mailto:") == 0
  102.                 }
  103.             catch (ex) {
  104.                 RealURL._menuitem.hidden = true
  105.                 }
  106.             }
  107.         }
  108.         
  109.     }
  110.     
  111. addEventListener("load", RealURL.load, false)